package fr.bugtracker.commun.dto.log;

import java.util.Date;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

/**
 * @author l.parrot1
 * @version 0.1
 */
public class DtoLigneLog {

	/**
	 * date où la ligne a été créée
	 */
	private Date date;
	/**
	 * sévérité du log (INFO ou ERROR)
	 */
	private String severity;
	/**
	 * message de log
	 */
	private String message;
	/**
	 * si la ligne est un titre ou non
	 */
	private boolean titre;

	/**
	 * Constructeur de la classe <code>DtoLigneLog</code>.
	 */
	public DtoLigneLog() {
	}

	/**
	 * Constructeur de la classe <code>DtoLigneLog</code>.
	 * @param pDate {@link Date}
	 * @param pSeverity {@link String}
	 * @param pMessage {@link String}
	 * @param pTitre {@link String}
	 */
	public DtoLigneLog(Date pDate, String pSeverity, String pMessage, boolean pTitre) {
		super();
		date = pDate;
		severity = pSeverity;
		message = pMessage;
		titre = pTitre;
	}

	/**
	 * Retourne le style d'affichage de la sévéritée dans la page xhtml
	 * @return {@link String}
	 */
	public String getStyleBySeverity() {
		if (severity != null) {
			if (severity.equals("INFO")) {
				return "log-fichier-severity-info";
			}
			if (severity.equals("WARN")) {
				return "log-fichier-severity-warning";
			}
			if (severity.equals("ERROR")) {
				return "log-fichier-severity-error";
			}
		}
		return "";
	}

	/**
	 * <p><b>Accès en lecture à l'attribut date.</b></p>
	 * @return Retourne l'attribut date sous forme de <code>Date</code>.
	 */
	public Date getDate() {
		return date;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut date.</b></p>
	 * @param pDate L'attribut date à modifier.
	 */
	public void setDate(Date pDate) {
		date = pDate;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut severity.</b></p>
	 * @return Retourne l'attribut severity sous forme de <code>String</code>.
	 */
	public String getSeverity() {
		return severity;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut severity.</b></p>
	 * @param pSeverity L'attribut severity à modifier.
	 */
	public void setSeverity(String pSeverity) {
		severity = pSeverity;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut message.</b></p>
	 * @return Retourne l'attribut message sous forme de <code>String</code>.
	 */
	public String getMessage() {
		return message;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut message.</b></p>
	 * @param pMessage L'attribut message à modifier.
	 */
	public void setMessage(String pMessage) {
		message = pMessage;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut titre.</b></p>
	 * @return Retourne l'attribut titre sous forme de <code>boolean</code>.
	 */
	public boolean isTitre() {
		return titre;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut titre.</b></p>
	 * @param pTitre L'attribut titre à modifier.
	 */
	public void setTitre(boolean pTitre) {
		titre = pTitre;
	}

	/**
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof DtoLigneLog)) {
			return false;
		}
		DtoLigneLog other = (DtoLigneLog) obj;
		return new EqualsBuilder().append(date, other.date).append(severity, other.severity).append(message, other.message).append(titre, other.titre).isEquals();
	}

	/**
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder(17, 37).append(date).append(severity).append(message).append(titre).toHashCode();
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "DtoLigneLog [date=" + date + ", severity=" + severity + ", message=" + message + ", titre=" + titre + "]";
	}

}
